﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.Common;
using Microsoft.Practices.EnterpriseLibrary.Data.Sql;
using Microsoft.Practices.EnterpriseLibrary.Common;
using System.Configuration;
using Insifo.BE.Seg;

namespace Insifo.DL.Seg
{
    public class DLGrupo : DLTransaction, IDLTransaccion<BEGrupo>
    {
        #region  Members

        /// <summary>
        /// Método obtiene los Grupos
        /// </summary>
        /// <returns>Devuelve un DataSet</returns>
       public DataSet Listar(BEGrupo pbe)
        {
            DataSet ds = new DataSet();
            SqlDatabase sqlDB = new SqlDatabase(CadenaConexion.Obtener());
            DbCommand dbCmd = sqlDB.GetStoredProcCommand("uSP_INSIFO_SEG_Grupo_Listar");
            try
            {
                dbCmd.CommandTimeout = CadenaConexion.CommandTimeout;
                sqlDB.AddInParameter(dbCmd, "@ai_IdAplicacion", DbType.Int32, pbe.IdAplicacion);
                sqlDB.AddInParameter(dbCmd, "@as_Descripcion", DbType.String, pbe.Descripcion);
                sqlDB.AddInParameter(dbCmd, "@as_Estado", DbType.String, pbe.Estado);
                sqlDB.AddInParameter(dbCmd, "@ai_Pagina", DbType.Int32, pbe.Pagina);
                ds = sqlDB.ExecuteDataSet(dbCmd);
            }
            catch (Exception)
            {
                throw;
            }
            finally
            {
                dbCmd.Dispose();
            }
            return ds;
        }


        /// <summary>
        /// Método obtiene Datos del Usuario
        /// </summary>
        /// <returns>Devuelve un DataSet</returns>
        /// 
       public BEGrupo Obtener(BEGrupo pbe)
        {
            BEGrupo be = new BEGrupo();
            SqlDatabase sqlDB = new SqlDatabase(CadenaConexion.Obtener());
            DbCommand dbCmd = sqlDB.GetStoredProcCommand("uSP_INSIFO_SEG_Grupo_Obtener");
            try
            {
                dbCmd.CommandTimeout = CadenaConexion.CommandTimeout;
                sqlDB.AddInParameter(dbCmd, "@ai_IdGrupo", DbType.Int32, pbe.IdGrupo);
                
                using (IDataReader reader = sqlDB.ExecuteReader(dbCmd))
                {
                    while (reader.Read())
                    {
                        be.IdAplicacion = DBValue.Get<Int32>(reader, "IdAplicacion");
                        be.Descripcion = DBValue.Get<String>(reader, "Descripcion");
                        be.CodigoGrupo = DBValue.Get<String>(reader, "CodigoGrupo");

                        be.Interface = DBValue.Get<String>(reader, "Interface");
                        be.InterfaceTabla = DBValue.Get<String>(reader, "InterfaceTabla");
                        be.InterfaceCodigo = DBValue.Get<String>(reader, "InterfaceCodigo");
                        be.InterfaceDescripcion = DBValue.Get<String>(reader, "InterfaceDescripcion");

                        be.Estado = DBValue.Get<String>(reader, "Estado");
                        be.UsuarioModificacion = DBValue.Get<String>(reader, "UsuarioModificacion");
                        be.FechaModificacion = DBValue.Get<DateTime>(reader, "FechaModificacion");
                        be.UsuarioCreacion = DBValue.Get<String>(reader, "UsuarioCreacion");
                        be.FechaCreacion = DBValue.Get<DateTime>(reader, "FechaCreacion");
                        break;
                    }
                }
            }
            catch (Exception e)
            {
                throw e;
            }

            finally
            {
                dbCmd.Dispose();
            }
            return be;
        }



        /// <summary>
        /// Método Inserta un Nivel Alerta
        /// </summary>
        /// <returns>Devuelve una entidad</returns>
       public BEGrupo Insertar(BEGrupo pbe)
        {
            BEGrupo be = new BEGrupo();
            SqlDatabase sqlDB = new SqlDatabase(CadenaConexion.Obtener());
            DbCommand dbCmd = sqlDB.GetStoredProcCommand("uSP_INSIFO_SEG_Grupo_Insertar");

            try
            {
                dbCmd.CommandTimeout = CadenaConexion.CommandTimeout;

                sqlDB.AddInParameter(dbCmd, "@ai_IdAplicacion", DbType.Int32, pbe.IdAplicacion);
                sqlDB.AddInParameter(dbCmd, "@as_CodigoGrupo", DbType.String, pbe.CodigoGrupo);
                sqlDB.AddInParameter(dbCmd, "@as_Descripcion", DbType.String, pbe.Descripcion);

                sqlDB.AddInParameter(dbCmd, "@as_Interface", DbType.String, pbe.Interface);
                sqlDB.AddInParameter(dbCmd, "@as_InterfaceTabla", DbType.String, pbe.InterfaceTabla);
                sqlDB.AddInParameter(dbCmd, "@as_InterfaceCodigo", DbType.String, pbe.InterfaceCodigo);
                sqlDB.AddInParameter(dbCmd, "@as_InterfaceDescripcion", DbType.String, pbe.InterfaceDescripcion);

                sqlDB.AddInParameter(dbCmd, "@as_Estado", DbType.String, pbe.Estado);
                sqlDB.AddInParameter(dbCmd, "@as_UsuarioCreacion", DbType.String, pbe.UsuarioCreacion);

                using (IDataReader reader = sqlDB.ExecuteReader(dbCmd))
                {
                    while (reader.Read())
                    {
                        be.IdGrupo = DBValue.Get<int>(reader, "IdGrupo");
                        be.FechaCreacion = DBValue.Get<DateTime>(reader, "FechaCreacion");
                        //Error
                        be.Error = DBValue.Get<Int32>(reader, "CodigoError");
                        be.Mensaje = DBValue.Get<String>(reader, "MensajeError");
                        break;
                    }
                }
            }
            catch (Exception e)
            {
                throw e;
            }

            finally
            {
                dbCmd.Dispose();
            }
            return be;
        }


        /// <summary>
        /// Método Actualiza un Nivel Alerta
        /// </summary>
        /// <returns>Devuelve una entidad</returns>
       public BEGrupo Actualizar(BEGrupo pbe)
        {
            BEGrupo be = new BEGrupo();
            SqlDatabase sqlDB = new SqlDatabase(CadenaConexion.Obtener());
            DbCommand dbCmd = sqlDB.GetStoredProcCommand("uSP_INSIFO_SEG_Grupo_Actualizar");

            try
            {
                dbCmd.CommandTimeout = CadenaConexion.CommandTimeout;

                sqlDB.AddInParameter(dbCmd, "@ai_IdAplicacion", DbType.Int32, pbe.IdAplicacion);
                sqlDB.AddInParameter(dbCmd, "@ai_IdGrupo", DbType.Int32, pbe.IdGrupo);
                sqlDB.AddInParameter(dbCmd, "@as_CodigoGrupo", DbType.String, pbe.CodigoGrupo);
                sqlDB.AddInParameter(dbCmd, "@as_Descripcion", DbType.String, pbe.Descripcion);
                sqlDB.AddInParameter(dbCmd, "@as_Interface", DbType.String, pbe.Interface);
                sqlDB.AddInParameter(dbCmd, "@as_InterfaceTabla", DbType.String, pbe.InterfaceTabla);
                sqlDB.AddInParameter(dbCmd, "@as_InterfaceCodigo", DbType.String, pbe.InterfaceCodigo);
                sqlDB.AddInParameter(dbCmd, "@as_InterfaceDescripcion", DbType.String, pbe.InterfaceDescripcion);
                sqlDB.AddInParameter(dbCmd, "@as_Estado", DbType.String, pbe.Estado);
                sqlDB.AddInParameter(dbCmd, "@as_UsuarioModificacion", DbType.String, pbe.UsuarioModificacion);

                using (IDataReader reader = sqlDB.ExecuteReader(dbCmd))
                {
                    while (reader.Read())
                    {
                        be.IdGrupo = DBValue.Get<Int32>(reader, "IdGrupo");
                        be.FechaModificacion = DBValue.Get<DateTime>(reader, "FechaModificacion");
                        //Error
                        be.Error = DBValue.Get<Int32>(reader, "CodigoError");
                        be.Mensaje = DBValue.Get<String>(reader, "MensajeError");
                        break;
                    }
                }
            }
            catch (Exception e)
            {
                throw e;
            }

            finally
            {
                dbCmd.Dispose();
            }
            return be;
        }


        /// <summary>
        /// Método Actualiza el Estado Nivel Alerta
        /// </summary>
        /// <returns>Devuelve una entidad</returns>
       public BEGrupo Eliminar(BEGrupo pbe)
        {
            BEGrupo be = new BEGrupo();
            SqlDatabase sqlDB = new SqlDatabase(CadenaConexion.Obtener());
            DbCommand dbCmd = sqlDB.GetStoredProcCommand("uSP_INSIFO_SEG_Grupo_Eliminar");

            try
            {
                dbCmd.CommandTimeout = CadenaConexion.CommandTimeout;

                sqlDB.AddInParameter(dbCmd, "@ai_IdAplicacion", DbType.Int32, pbe.IdAplicacion);
                sqlDB.AddInParameter(dbCmd, "@ai_IdGrupo", DbType.Int32, pbe.IdGrupo);
                sqlDB.AddInParameter(dbCmd, "@as_Estado", DbType.String, pbe.Estado);
                sqlDB.AddInParameter(dbCmd, "@as_UsuarioModificacion", DbType.String, pbe.UsuarioModificacion);

                using (IDataReader reader = sqlDB.ExecuteReader(dbCmd))
                {
                    while (reader.Read())
                    {
                        be.IdGrupo = DBValue.Get<Int32>(reader, "IdGrupo");
                        be.FechaModificacion = DBValue.Get<DateTime>(reader, "FechaModificacion");
                        //Error
                        be.Error = DBValue.Get<Int32>(reader, "CodigoError");
                        be.Mensaje = DBValue.Get<String>(reader, "MensajeError");
                        break;
                    }
                }
            }
            catch (Exception e)
            {
                throw e;
            }

            finally
            {
                dbCmd.Dispose();
            }
            return be;
        }

       /// <summary>
       /// Método Inserta un Nivel Alerta
       /// </summary>
       /// <returns>Devuelve una entidad</returns>
       public BEGrupo ImportarConcepto(BEGrupo pbe)
       {
           BEGrupo be = new BEGrupo();
           SqlDatabase sqlDB = new SqlDatabase(CadenaConexion.Obtener());
           DbCommand dbCmd = sqlDB.GetStoredProcCommand("uSP_INSIFO_SEG_Grupo_Importar");

           try
           {
               dbCmd.CommandTimeout = CadenaConexion.CommandTimeout;

               sqlDB.AddInParameter(dbCmd, "@ai_IdGrupo", DbType.Int32, pbe.IdGrupo);
               sqlDB.AddInParameter(dbCmd, "@as_InterfaceTabla", DbType.String, pbe.InterfaceTabla);
               sqlDB.AddInParameter(dbCmd, "@as_InterfaceCodigo", DbType.String, pbe.InterfaceCodigo);
               sqlDB.AddInParameter(dbCmd, "@as_InterfaceDescripcion", DbType.String, pbe.InterfaceDescripcion);

               sqlDB.AddInParameter(dbCmd, "@as_Estado", DbType.String, pbe.Estado);
               sqlDB.AddInParameter(dbCmd, "@as_UsuarioCreacion", DbType.String, pbe.UsuarioCreacion);

               using (IDataReader reader = sqlDB.ExecuteReader(dbCmd))
               {
                   while (reader.Read())
                   {
                       be.IdGrupo = DBValue.Get<int>(reader, "IdGrupo");
                       be.FechaCreacion = DBValue.Get<DateTime>(reader, "FechaCreacion");
                       //Error
                       be.Error = DBValue.Get<Int32>(reader, "CodigoError");
                       be.Mensaje = DBValue.Get<String>(reader, "MensajeError");
                       break;
                   }
               }
           }
           catch (Exception e)
           {
               throw e;
           }

           finally
           {
               dbCmd.Dispose();
           }
           return be;
       }

        #endregion  Members
    }
}
